package net.comfycastle.musicplayer;

import android.content.Context;
import android.database.Cursor;
import android.support.v4.widget.CursorAdapter;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

/**
 * 앨범 리스트를 표현하는 adapter
 * @author ricale
 *
 */
public class AlbumListMCAdapter extends MusicCursorAdapter {
	///////////
	//////////
	/////////   enum
	
	/** adapter와 연결된 cursor의 데이터 상태를 표시 */
	public static enum VIEWSTATE {
		/** 모든 아티스트의 앨범 데이터를 다루고 있는 상태 */
		ALL,
		/** 특정 아티스트의 앨범 데이터를 다루고 있는 상태 */
		SPECIFY
	} // end VIEWSTATE
	
	///////////
	//////////
	/////////   variable
	
	/** 현재 adapter의 VIEWSTATE */
	private VIEWSTATE mViewState;
	/** 앨범 아트 로더 클래스 */
	private AlbumArtManager mAlbumArtLoader;
	
	///////////
	//////////
	/////////   constructor
	
	/**
	 * 생성자
	 * @param context Adapter를 생성하는 Context
	 * @param cursor  데이터 Cursor
	 */
	public AlbumListMCAdapter(Context context, Cursor cursor) {
		this(context, R.layout.listitem_albumlist, cursor, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
	} // end AlbumListMCAdapter(Context, Cursor)
	
	/**
	 * 생성자
	 * @param context Adapter를 생성하는 Context
	 * @param layout  항목 뷰 레이아웃 리소스 아이디
	 * @param cursor  데이터 Cursor
	 * @param flags
	 */
	public AlbumListMCAdapter(Context context, int layout, Cursor cursor, int flags) {
		super(context, layout, cursor, flags);
		mAlbumArtLoader = new AlbumArtManager(context);
	} // end AlbumListMCAdapter(Context, int, Cursor, int)
	
	///////////
	//////////
	/////////   setter
	
	/**
	 * 현재 adpater가 다루고 있는 데이터의 종류를 설정한다.
	 * @paran viewState 정보의 종류를 구분하기 위한 상수
	 */
	public void setViewState(VIEWSTATE viewState) {
		mViewState = viewState;
	} // end setViewMode
	
	///////////
	//////////
	/////////   methods
	
	/**
	 * 앨범 아트 비트맵 메모리를 해제한다.
	 */
	public void releaseArts() {
		mAlbumArtLoader.release();
	} // end releaseArts
	
	///////////
	//////////
	/////////   callback method
	
	/**
	 * 각각의 항목 뷰에 정보들을 등록(binding)하기 위한 콜백 메소드
	 */
	@Override
	public void bindView(View view, Context context, Cursor cursor) {
		ImageView ivAlbumart = (ImageView)view.findViewById(R.id.listitem_albumlist_albumart);
		ivAlbumart.setImageDrawable(null);

		long albumId = Long.parseLong(cursor.getString(cursor.getColumnIndex(MPApp.TAG_ALBUMID)));
		mAlbumArtLoader.requestAlbumArt(ivAlbumart, albumId);
		
		TextView tvTitle  = (TextView)view.findViewById(R.id.listitem_albumlist_album);
		tvTitle.setText(cursor.getString(cursor.getColumnIndex(MPApp.TAG_ALBUM)));
				
		if(mViewState == VIEWSTATE.ALL) {
			LinearLayout ll = (LinearLayout)view.findViewById(R.id.listitem_albumlist_container);
			ll.setOrientation(LinearLayout.VERTICAL);
			TextView tvArtist = (TextView)view.findViewById(R.id.listitem_albumlist_artist);
			tvArtist.setText(cursor.getString(cursor.getColumnIndex(MPApp.TAG_TITLEARTIST)));
		} // end if
	} // end bindView
} // end AlbumListMCAdapter